学业支持团队需要一份 近期表现有所下滑的在读选课记录的名单。将每位学生与其在同一门课程中先前的表现进行比较。
明确规则
- 使用两个阶段:
先前和近期。每个阶段各有两次权重相同的考核。 - 在比较平均分之前, 每个 阶段都要求至少有两次非 NULL 成绩。
- 计算
decline_points = earlier_avg - recent_avg。 - 下滑至少 15 分意味着 需要复核。否则符合条件的选课记录为 无需提醒。
- 将 数据不足 单独处理。零是有效成绩;NULL 或缺失的记录并不等于零。
准备你的数据库
在 pgAdmin 中打开提供的 lab8_setup.sql (位于助教文件夹 DSAI2202/lab8/ 中)并运行整个文件。每当打开新连接时,请再次使用右侧的连接设置。
该设置还提供了 performance_comparison,这是一个称为视图的已保存查询。它将用于支持后续练习;它并不是存储考核成绩的额外数据表。
✍️ 计算前先检查
检查 E01、E07、E08、E09 和 E24。判断哪些在两个阶段都拥有足够的成绩。解释为什么 E24 的零比 E08 的 NULL 值提供更有力的证据。
SET search_path TO lab8;SET search_path TO lab8;
SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;SET search_path TO lab8;
SELECT e.enrolment_id, e.student_id, e.course_code,
r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;核对设置中的数据行数
| 数据表 | 行数 | 一行代表 |
|---|---|---|
| students | 18 | 一名学生的档案 |
| courses | 4 | 一门课程 |
| enrolments | 24 | 一名学生对一门课程的选课记录 |
| assessment_results | 92 | 某条选课记录在某阶段的一次考核成绩 |
| support_units | 7 | 选做层级练习中的一个支持单位 |
共有 22 条在读选课记录和 2 条已退选记录。最终调查需要 每条在读选课记录一行,而不是每次考核一行,也不是每名学生在所有课程中合计一行。
五个需要追踪的案例
| 选课记录 | 课程 | 先前成绩 | 近期成绩 | 证据是否充足? |
|---|---|---|---|---|
| E01 | SQL101 | 80, 90 | 60, 70 | 充足 |
| E07 | SQL101 | 80, NULL | 50, 50 | 不充足:先前只有一次成绩 |
| E08 | SQL101 | 80, 80 | NULL, NULL | 不充足:近期没有任何已评分成绩 |
| E09 | SQL101 | 无记录 | 60, 60 | 不充足:缺少先前阶段 |
| E24 | STAT101 | 0, 0 | 0, 0 | 充足 |
检查查询返回 18 条考核记录。E09 只有两条记录;其先前阶段的考核记录缺失。E08 有两条近期记录,但都没有记录成绩。
查看两个符合条件的示例
E01:先前平均分 85,近期平均分 65,下滑 20 分 → 需要复核。E24:两个阶段平均分均为 0,下滑 0 分 → 无需提醒。其余三个示例应标注为数据不足。